﻿// 常用 js 脚本
// 下载软件 on 2008-7-10
document.write("<script   src='Drag.js'><\/script>");   

function $__Common__$() 
{ 
	this.__Object__ = [];
	this.__ObjectPre__ = [];	
	this.__ColorSelectB__ = "#f00";
	this.__ColorSelectF__ = "#fff";
}

$__Common__$.prototype.$ = function(id)
{
	return document.getElementById(id);
};

// 类似 C# 中的 string.Format，传的参数是数组
String.prototype.Format = function(array)
{
	var result = this;
	var pattern = /\{\d+\}/g;
	var arrayR = this.match(pattern);

	for (var i = 0; i < arrayR.length; i++)
	{
		result = result.replace(arrayR[i], array[i]);
	}
	
	return result;
};

// --------------------------------------------------------------------------------------------------------------------------
// 返回当前对象的背景和前景色
$__Common__$.prototype.__Color__ = function(obj)
{
	if (!obj) return;

	var preColorB = "#fff";
	var preColorF = "#000";
	// 保存当前对象的背景色
	if (obj.style.backgroundColor)
	{
		preColorB = obj.style.backgroundColor;
		preColorF = obj.style.color;
	}
	else
	{
		var labName;
		// 背景颜色可能是用CSS文件中指定的
		if (obj.id)
		{
			labName = "#"+ obj.id;
		}
		else if (obj.className)
		{
			labName = "."+ obj.className;
		}
		else
		{
			labName = obj.tagName;
		}
		var sheetStyles = document.styleSheets;
		for (var i = 0; i < sheetStyles.length; i++)
		{
			var sheetRules = sheetStyles[i].rules;
			for (var ii = 0; ii < sheetRules.length; ii++)
			{
				if (sheetRules[ii].selectorText == labName)
				{
					preColorB = sheetRules[ii].style.backgroundColor;
					preColorF = sheetRules[ii].style.color;
				}
			}
		}
	}
	
	return { ColorB : preColorB, ColorF : preColorF };
};

// --------------------------------------------------------------------------------------------------------------------------
// 弹出窗口 [window.open()]
// 链接地址 宽 高 滚动条显示
$__Common__$.prototype.Open = function(url, width, height, scroll)
{
	var temp = "";
	temp += "height={0},width={1},scrollbars={2},";
	temp += "status=no,toolbar=no,menubar=no,location=no,resizable=no";
	
	window.open(url, null, temp.Format([height,width,scroll]), true);
};

// 弹出窗口 [window.showModalDialog()]
// 链接地址 宽 高 滚动条显示
$__Common__$.prototype.Show = function(url, width, height, scroll)
{
	var temp = "";
	temp += "dialogHeight:{0}px;dialogWidth:{1}px;scroll:{2};";
	temp += "edge:Raised;center:Yes; help:No;resizable:No;status:No";
	
	window.showModalDialog(url, window, temp.Format([height,width,scroll]));
};

// 只允许输入数字 [TextBox 和 TextArea，0表示提示，1表示自动替换为空白]
// 对象 类型
$__Common__$.prototype.Int = function(obj, type)
{
	if (obj.type == "text" || obj.type == "textarea")
	{
		if (obj.value != "")
		{
			var result = obj.value;
			var arrayR = result.match(/[^\d]+/g);
			if (arrayR)
			{		
				if (type == 0)
				{
					alert("只能输入数字！");
					obj.focus(); obj.select();
				}
				else if(type == 1)
				{
					for (var i = 0; i < arrayR.length; i++)
					{
						result = result.replace(arrayR[i], "");
					}
				}
			}
			obj.value = result;
		}
	}	
};

// 只允许输入指定小数位数的数字 [TextBox 和 TextArea]
// 对象 保留小数位数
$__Common__$.prototype.Float = function(obj, num)
{
	if (obj.type == "text" || obj.type == "textarea")
	{
		var value = obj.value;
		if(value != "")
		{
			if (!isNaN(value))
			{
				var re = /^\d+(\.?\d{1,})?$/;
				if (re.test(value))
				{
					var dotIndex = value.indexOf(".");
					if (dotIndex != -1)
					{
						obj.value = value.substr(0, dotIndex + num + 1);
					} 
				}
			}
			else
			{
				this.Int(obj, 1);
			}
		}
	}
};

// --------------------------------------------------------------------------------------------------------------------------
// 改变 element 的颜色
// 对象 鼠标划过背景颜色（#fff） 鼠标划过前景颜色（#000）
$__Common__$.prototype.Color = function(obj, colorB, colorF)
{
	var __color__ = this.__Color__(obj);
	
	colorB = colorB ? colorB : "#fff";
	colorF = colorF ? colorF : "#000";

//	obj.onmouseover = function()
//	{
		obj.style.backgroundColor = colorB;
		obj.style.color = colorF;
//	};
	obj.onmouseout = function()
	{
		this.style.backgroundColor = __color__.ColorB;
		this.style.color = __color__.ColorF;
	};
};

// 全选
// 全选触发源对象 checkbox的容器Id 排除的checkbox id集
$__Common__$.prototype.SelectAll = function(obj, containerId, exceptIds)
{
	if (obj.type != "checkbox") return false;
	
	var container = this.$(containerId);
	var checkboxs = container.all.tags("INPUT");
	
	if (checkboxs)
	{
		// 将原有选中状态的 checkbox 置为非选中
		for (var i = 0; i < checkboxs.length; i++)
		{
			var checkbox = checkboxs[i];
			if (checkbox.type == "checkbox")
			{
				if (checkbox.checked)
				{
					if (exceptIds)
					{
						if (checkbox.id)
						{
							if (exceptIds.indexOf(checkbox.id) == -1)
							{
								checkbox.checked = false;
								this.Select(checkbox, this.__ColorSelectB__, this.__ColorSelectF__);
							}
						}
						else
						{
							checkbox.checked = false;
							this.Select(checkbox, this.__ColorSelectB__, this.__ColorSelectF__);
						}
					}
					else
					{
						checkbox.checked = false;
						this.Select(checkbox, this.__ColorSelectB__, this.__ColorSelectF__);
					}
				}
			}
		}
		// 选中或取消选中所有 checkbox
		for (var i = 0; i < checkboxs.length; i++)
		{
			var checkbox = checkboxs[i];
			if (checkbox.type == "checkbox")
			{
				if (exceptIds)
				{
					if (checkbox.id)
					{
						if (exceptIds.indexOf(checkbox.id) == -1)
						{
							checkbox.checked = obj.checked;
							this.Select(checkbox, this.__ColorSelectB__, this.__ColorSelectF__);
						}
					}
					else
					{
						checkbox.checked = obj.checked;
						this.Select(checkbox, this.__ColorSelectB__, this.__ColorSelectF__);
					}
				}
				else
				{
					checkbox.checked = obj.checked;
					this.Select(checkbox, this.__ColorSelectB__, this.__ColorSelectF__);
				}
			}
		}
	}
};

// 单选一个
// 对象（目前只有 checkbox） 单击背景颜色（#f00） 单击前景颜色（#fff）
$__Common__$.prototype.Select = function(obj, colorB, colorF)
{
	var checkbox = obj;
	var parent = obj;
	
	while (parent && parent.tagName != "TR")
	{
		parent = parent.parentElement;
	}
	
	var all = obj.all.tags("INPUT");
	for (var i = 0; i < all.length; i++)
	{
		if (all[i].type = "checkbox")
		{
			checkbox = all[i];
			if (event.srcElement.type != "checkbox")
			{
				checkbox.checked = !checkbox.checked;
			}
			break;
		}
	}
	
	if (checkbox.checked)
	{
		// 多选时不会有 onmouseout
		if (parent.onmouseout) parent.onmouseout();

		colorB = colorB ? colorB : "#f00";
		colorF = colorF ? colorF : "#fff";		
		
		this.__ColorSelectB__ = colorB;
		this.__ColorSelectF__ = colorF;
		// 克隆一个结点
		var parentClone = parent.cloneNode();
		parentClone.onmouseover = parent.onmouseover;
		parentClone.onmouseout = parent.onmouseout;
		this.__ObjectPre__.push(parentClone);
		// 移除对应操作后保存结点
		parent.style.backgroundColor = colorB;
		parent.style.color = colorF;		
		parent.onmouseover = {};
		parent.onmouseout = {};		
		this.__Object__.push(parent);
	}
	else
	{
		var preObject;
		for (var i = 0; i < this.__Object__.length; i++)
		{
			if (parent == this.__Object__[i])
			{
				preObject = this.__ObjectPre__[i];
				// 移除数组，防止产生冗余
				this.__Object__.splice(i,1);
				this.__ObjectPre__.splice(i,1);
			}
		}
		
		if (preObject)
		{
			var __color__ = this.__Color__(preObject);
			parent.style.backgroundColor = __color__.ColorB;
			parent.style.color = __color__.ColorF;
			parent.onmouseover = preObject.onmouseover;
			parent.onmouseout = preObject.onmouseout;
		}
	}
};

// --------------------------------------------------------------------------------------------------------------------------
// 鼠标划过/移出/单击事件
// 对象 鼠标划过背景颜色（#fff） 鼠标划过前景颜色（#000） 单击背景颜色（#f00） 单击前景颜色（#fff）
$__Common__$.prototype.OverClick = function(obj, colorBM, colorFM, colorBC, colorFC)
{
	var base = this;
	
	colorBM = colorBM ? colorBM : "#fff";
	colorFM = colorFM ? colorFM : "#000";
	colorBC = colorBC ? colorBC : "#f00";
	colorFC = colorFC ? colorFC : "#fff";		
	
	base.Color(obj, colorBM, colorFM);
	obj.onclick = function()
	{
		base.Select(this, colorBC, colorFC);
	};
}

// 表格事件一次添加（括号中为默认值）
// 对象 鼠标划过背景颜色（#fff） 鼠标划过前景颜色（#000） 单击背景颜色（#f00） 单击前景颜色（#fff） 头行数（1） 尾行数（1）
$__Common__$.prototype.Table = function(obj, colorBM, colorFM, colorBC, colorFC, headRows, footRows)
{
	var base = this;
	
	colorBM = colorBM ? colorBM : "#fff";
	colorFM = colorFM ? colorFM : "#000";
	colorBC = colorBC ? colorBC : "#f00";
	colorFC = colorFC ? colorFC : "#fff";		
	headRows = isNaN(headRows) ? 0 : parseInt(headRows);
	footRows = isNaN(footRows) ? 0 : parseInt(footRows);
	
	for (var i = 0; i < obj.rows.length; i++)
	{
		if (i > headRows - 1 && i < obj.rows.length - footRows)
		{
			var row = obj.rows[i];
			// 当创建好后不再进行创建
			if (row.onmouseover || row.onclick) break;
			row.onmouseover = function()
			{
				base.Color(this, colorBM, colorFM);
			};
//			row.onclick = function()
//			{
//				base.Select(this, colorBC, colorFC);
//			};
			//var a = function(r){return function(){base.Select(r, colorBC, colorFC);};};
			//row.attachEvent("onclick", a(row));
			row.attachEvent("onclick", base.Select.bind(base, row, colorBC, colorFC));
			//row.attachEvent("onclick", function(){base.Select(this, colorBC, colorFC);});
		}
	}
}

Function.prototype.bind = function () {
//绑定事件
var wc = this, a = $A(arguments), o = a.shift();
return function () {
wc.apply(o, a.concat($A(arguments)));
};
};

var $A = function (a) 
{
	//转换数组
	return a ? Array.apply(null, a) : new Array;
};


var $C = new $__Common__$();
